package basics

import "fmt"

// AnonymousFunctions 匿名函数：全局匿名函数、局部匿名函数
func AnonymousFunctions() {
	a()
	b()

	// 局部匿名函数

	// 直接调用
	func(s string) {
		fmt.Println(s)
	}("hello gaox")

	// 保存到变量
	asVariable := func(s string) {
		fmt.Println(s)
	}
	asVariable("hello gaoxizhi")

	// 作为参数
	funcAsParameter(func(s string) {
		fmt.Println(s)
	})

	// 作为返回值
	asReturn := funcAsReturn()
	asReturn(1, 6)

}

// 全局匿名函数：方式一
var a = func() {
	fmt.Println("hello world1")
}

// 全局匿名函数：方式二
var (
	b = func() {
		fmt.Println("hello world2")
	}
)

// 接受函数类型参数的函数
func funcAsParameter(f func(s string)) {
	f("hello gaox")
}

// 返回一个函数
func funcAsReturn() func(int, int) {
	return func(a int, b int) {
		fmt.Println(a + b)
	}
}
